using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.SGI.ERP.Entidades;

namespace MakeIT.SGI.ERP.Negocios
{
	public partial class SgiDAOT : DAOT
	{

        public PerfiladmVO getPerfiladm(int? idPerfilAdm, string perfilAdm, int? idFilial)
		{
			PerfiladmVO perfiladmVO = null;
			List<PerfiladmVO> listPerfiladmVOs = getPerfiladms(idPerfilAdm, perfilAdm, idFilial);
			if (listPerfiladmVOs != null && listPerfiladmVOs.Count > 0)
			{
				perfiladmVO = listPerfiladmVOs[0];
			}
			return perfiladmVO;
		}

		public PerfiladmVO getPerfiladm(int? idPerfilAdm, string perfilAdm)
		{
			return getPerfiladm(idPerfilAdm, perfilAdm, null);
		}

        public PerfiladmVO getPerfiladm(int? idPerfilAdm)
        {
            return getPerfiladm(idPerfilAdm, null);
        }

		public List<PerfiladmVO> getPerfiladms()
		{
			return getPerfiladms(null);
		}

		public List<PerfiladmVO> getPerfiladms(int? idPerfilAdm)
		{
			return getPerfiladms(idPerfilAdm, null);
		}

        public List<PerfiladmVO> getPerfiladms(int? idPerfilAdm, string perfilAdm)
		{
            return getPerfiladms(idPerfilAdm, perfilAdm, null);
        }

        public List<PerfiladmVO> getPerfiladms(int? idPerfilAdm, string perfilAdm, int? idFilial)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT pfa.idPerfilAdm as pfa_idPerfilAdm, pfa.idFilial as pfa_idFilial, pfa.perfilAdm as pfa_perfilAdm, pfa.cadastro as pfa_cadastro, pfa.cadastradoPor as pfa_cadastradoPor, pfa.edicao as pfa_edicao, pfa.editadoPor as pfa_editadoPor  ");
            query.AppendLine("FROM perfiladm as pfa LEFT OUTER JOIN filial as fil on pfa.idFilial=fil.idFilial  ");
			if (idPerfilAdm != null)
			{
				query.AppendLine(where + "pfa.idPerfilAdm=@idPerfilAdm ");
				where = "AND ";
			}
			if (perfilAdm != null)
			{
				query.AppendLine(where + "pfa.perfilAdm LIKE @perfilAdm ");
				where = "AND ";
			}
            if (idFilial != null)
            {
                query.AppendLine(where + "pfa.idFilial=@idFilial ");
                where = "AND ";
            }


			query.AppendLine("ORDER BY pfa.perfilAdm ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			if (idPerfilAdm!= null) cmd.Parameters.Add(getParameter(cmd, "@idPerfilAdm", idPerfilAdm));
			if (perfilAdm!= null) cmd.Parameters.Add(getParameter(cmd, "@perfilAdm", "%"+perfilAdm+"%"));
            if (idFilial != null) cmd.Parameters.Add(getParameter(cmd, "@idFilial", idFilial));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<PerfiladmVO> listPerfiladm = new List<PerfiladmVO>();

				while (reader.Read())
				{
					PerfiladmVO perfiladmVO = PerfiladmVO.CreateVO();
					perfiladmVO.idPerfilAdm = reader.GetInt32(reader.GetOrdinal("pfa_idPerfilAdm"));
					perfiladmVO.perfilAdm = reader.GetString(reader.GetOrdinal("pfa_perfilAdm"));
                    perfiladmVO.idFilial = reader.GetInt32(reader.GetOrdinal("pfa_idFilial"));
                    if (!reader.IsDBNull(reader.GetOrdinal("pfa_idFilial")))
                        perfiladmVO.idFilialVO.filial = reader.GetString(reader.GetOrdinal("pfa_idFilial"));
					perfiladmVO.cadastro = reader.GetDateTime(reader.GetOrdinal("pfa_cadastro"));
					perfiladmVO.cadastradoPor = reader.GetString(reader.GetOrdinal("pfa_cadastradoPor"));
					perfiladmVO.edicao = reader.GetDateTime(reader.GetOrdinal("pfa_edicao"));
					perfiladmVO.editadoPor = reader.GetString(reader.GetOrdinal("pfa_editadoPor"));


					listPerfiladm.Add(perfiladmVO);
				}
				reader.Close();
				return listPerfiladm;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}

		public void setPerfiladm(PerfiladmVO perfiladmVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE perfiladm ");
			query.AppendLine("SET idFilial=@idFilial, perfilAdm=@perfilAdm,  cadastro=@cadastro, cadastradoPor=@cadastradoPor, edicao=@edicao, editadoPor=@editadoPor ");
			query.AppendLine("WHERE idPerfilAdm=@idPerfilAdm ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idPerfilAdm", perfiladmVO.idPerfilAdm));
            cmd.Parameters.Add(getParameter(cmd, "@idFilial", perfiladmVO.idFilial));
			cmd.Parameters.Add(getParameter(cmd, "@perfilAdm", perfiladmVO.perfilAdm));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", perfiladmVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", perfiladmVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", perfiladmVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", perfiladmVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}

		public long newPerfiladm(PerfiladmVO perfiladmVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO perfiladm ");
			query.AppendLine("  ( idFilial, perfilAdm, cadastro, cadastradoPor, edicao, editadoPor ) ");
            query.AppendLine("VALUES ( @idFilial, @perfilAdm, @cadastro, @cadastradoPor, @edicao, @editadoPor ) ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@perfilAdm", perfiladmVO.perfilAdm));
            cmd.Parameters.Add(getParameter(cmd, "@idFilial", perfiladmVO.idFilial));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", perfiladmVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", perfiladmVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", perfiladmVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", perfiladmVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('perfiladm') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }

		}

		public void delPerfiladm(PerfiladmVO perfiladmVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM perfiladm ");
			query.AppendLine("WHERE idPerfilAdm=@idPerfilAdm ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idPerfilAdm", perfiladmVO.idPerfilAdm));


			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}
	}
}
